package com.example.lcode.greedy;

import java.util.PriorityQueue;

/**
 *
 * 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 *
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums = [10,2]
 * 输出："210"
 * 示例 2：
 *
 * 输入：nums = [3,30,34,5,9]
 * 输出："9534330"
 * 示例 3：
 *
 * 输入：nums = [1]
 * 输出："1"
 * 示例 4：
 *
 * 输入：nums = [10]
 * 输出："10"
 *  
 *
 * 提示：
 *
 * 1 <= nums.length <= 100
 * 0 <= nums[i] <= 109
 *
 **/
public class Question179 {

    public String largestNumber(int[] nums) {
        PriorityQueue<String> queue = new PriorityQueue<>((y, x) -> (x + y).compareTo(y + x));
        for (int i = 0; i < nums.length; i++) {
            queue.add(String.valueOf(nums[i]));
        }
        StringBuilder res = new StringBuilder("");
        while (queue.peek() != null) {
            res = res.append(queue.poll());
        }
        return res.length() > 0 && res.charAt(0) == '0' ? "0" : res.toString();
    }

    public static void main(String[] args) {
        int []arrays = {3,30,34,5,9};
        Question179 question179 = new Question179();
        System.out.println(question179.largestNumber(arrays));
    }
}
